 // 这里为什么要Debug? 因为assert_eq!需要Debug, 为什么assert_eq!需要Debug, 因为Debug是assert_eq!的泛型参数
#[derive(PartialEq, Debug)]
struct Shoe {
  size: u32,
  style: String
}
// into_iter() 方法会消耗掉原来的集合, 所以不能在调用完之后继续使用原来的集合
// filter() 方法会返回一个迭代器, 这个迭代器会遍历原来的集合, 并对每个元素应用闭包, 如果闭包返回true, 则保留该元素, 否则丢弃
// collect() 方法会将迭代器中的元素收集到一个新的集合中
fn shoe_in_my_size(shoes: Vec<Shoe>, shoe_size: u32) -> Vec<Shoe> {
  shoes.into_iter().filter(|x| x.size == shoe_size).collect()
}

// #[test]表示这是一个测试函数
#[test]
fn test_demo() {
  let shoes = vec!(
      Shoe {size: 12, style: String::from("haha")},
      Shoe {size: 10, style: String::from("hehe")},
      Shoe {size: 10, style: String::from("bobo")},
  );
  let reults = shoe_in_my_size(shoes, 10);
  assert_eq!(reults,vec!(
    Shoe {size: 10, style: String::from("hehe")},
    Shoe {size: 10, style: String::from("bobo")},
  ));
}